package m.html.list;

import m.html.element.Element;
import m.html.element.Text;
import m.html.element.other.IElement;

import java.util.HashSet;
import java.util.Set;

public class ListElement extends Element implements IListElement {

	/**
	 * 列表行内判断  {text, record, index} 当前列字段，行记录，行
	 *  test 表达式   例如:text=='1'
	 */
	public static ListElement test(String test,IListElement e) {
		return new ListElement("template").addAttr("v-if", test).addElement(e);
	}
	/** 需配合 test
	 * 列表行内判断  {text, record, index} 当前列字段，行记录，行
	 *  test  表达式   例如:text=='1'
	 */
	public static ListElement elseTest(String test,IListElement e) {
		return new ListElement("template").addAttr("v-else-if", test).addElement(e);
	}
	/** 需配合 test 或者 elseTest
	 * 列表行内判断  {text, record, index} 当前列字段，行记录，行
	 *  test  表达式   例如:text=='1'
	 */
	public static ListElement elseOther(IListElement e) {
		return new ListElement("template").addAttr("v-else").addElement(e);
	}
	
	public ListElement(String tagName) {
		super(tagName);
	}

	/**
	 * 常用组件 tag
	 */
	public static ListElement tag(String text,String color){
		return tag(text,color,true);
	}
	/**
	 * 常用组件 tag
	 */
	public static ListElement tag(String text,String color,boolean border){
		return new ListElement("a-tag").addAttr("color",color).addAttr(":bordered", String.valueOf(border)).addText(text);
	}
	/**
	 * 常用组件 a-badge 点模式
	 */
	public static ListElement dot(String text,String color){
		return new ListElement("a-badge").addAttr("color",color).addAttr("text",text);
	}

	/**
	 * 获取参数所需的字段
	 * 
	 */
	public Set<String> getParamFields() {
		Set<String> pf= new HashSet<>();
		if(null!=this.event) pf.addAll(this.event.getParamFields());
		for(IElement ele : this.getChilds()) {
			if(ele instanceof IListElement) {
				pf.addAll(((IListElement)ele).getParamFields());
			}
		}
		return pf;
	}
	/**
	 * 添加子元素
	 *  element
	 * 
	 */
	public ListElement addElement(IListElement... element) {
		super.E(element);
		return this;
	}
	public ListElement addText(String text) {
		super.E(new Text(text));
		return this;
	}
	public ListElement addAttr(String name) {
		super.A(name);
		return this;
	}
	public ListElement addAttr(String name,String value) {
		super.A(name, value);
		return this;
	}
	private ListEvent event;//事件
	@Override
	public ListEvent getEvent() {
		return event;
	}
	public ListElement setEvent(ListEvent event) {
		this.event=event;
		this.setExtend(event.toExtendString());
		return this;
	}

}
